package persistencia.cv;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

import persistence.DBManager;

import negocio.cv.Barrio;
import negocio.cv.Calle;
import negocio.cv.Domicilio;
import negocio.cv.EstadoCivil;
import negocio.cv.Localidad;
import negocio.cv.Nacionalidad;
import negocio.cv.Persona;
import negocio.cv.Provincia;
import negocio.cv.TipoDocumento;

public class DAOPersona implements DAOInterface {

	private DBManager manager;
	
	private SimpleDateFormat sdformat;

	public DAOPersona(DBManager manager) {
		this.manager = manager;
		sdformat= new SimpleDateFormat("yyyy-MM-dd");
	}

	@Override
	public void delete(Object b) {
		// TODO Auto-generated method stub

	}

	@Override
	public Persona get(String businessId) {
		Persona p = null;
		ResultSet rs = null;
		String query;
		int id = Integer.parseInt(businessId);
		try {
			query = "call tesis.persona_get("
					+ id
					+ ",@nombre,@apellido,@idtipodocumento,@nrodocumento"
					+ ",@fechanacimiento,@idnacionalidad,@celular,@prefijo,@telefono,@email,@idestadocivil,@sexo,@cuil,"
					+ "@cantidadhijos,@estatura,@peso,@movilidad,@observacion,@iddomicilio);";
			query += "select @nombre,@apellido,@idtipodocumento,@nrodocumento"
					+ ",@fechanacimiento,@idnacionalidad,@celular,@prefijo,@telefono,@email,@idestadocivil,@sexo,@cuil,"
					+ "@cantidadhijos,@estatura,@peso,@movilidad,@observacion,@iddomicilio";
			rs = manager.openCallableQuery(query);
			rs.first();

			TipoDocumento tipoDoc = new DAOTipoDocumento(manager).get(String
					.valueOf(rs.getInt(3)));
			Nacionalidad nacionalidad = new DAONacionalidad(manager).get(String
					.valueOf(rs.getInt(6)));
			EstadoCivil estadoCivil = new DAOEstadoCivil(manager).get(String
					.valueOf(rs.getInt(11)));
			Domicilio domicilio = new DAODomicilio(manager).get(String
					.valueOf(rs.getInt(19)));
			
			Date fechaNacimiento = null;
			try {
				fechaNacimiento = sdformat.parse(rs.getObject(5).toString());
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
//			 IN  pin_idpersona int(10) unsigned,
//			  OUT pout_nombre varchar(50),
//			  OUT pout_apellido varchar(50),
//			  OUT pout_idtipodocumento int(10) unsigned,
//			  OUT pout_nrodocumento int(10),
//			  OUT pout_fechanacimiento VARCHAR(10),
//			  OUT pout_idnacionalidad int(10) unsigned,
//			  OUT pout_celular int(20),
//			  OUT pout_prefijo int(5),
//			  OUT pout_telefono int(20),
//			  OUT pout_email varchar(45),
//			  OUT pout_idestadocivil int(10) unsigned,
//			  OUT pout_sexo char(2),
//			  OUT pout_cuil bigint(20),
//			  OUT pout_cantidadhijos int(2) unsigned,
//			  OUT pout_estatura decimal(2,0),
//			  OUT pout_peso decimal(2,0),
//			  OUT pout_movilidad char(2),
//			  OUT pout_observacion varchar(150),
//			  OUT pout_iddomicilio int(10) unsigned)
			boolean movilidad = rs.getObject(17).toString() =="S"  ? true : false;
			String sexo = rs.getInt(12) == 0 ? "M" : "F";
			p = new Persona(rs.getObject(1).toString(), rs.getObject(2)
					.toString(), tipoDoc, rs.getInt(4),
					fechaNacimiento, nacionalidad, rs.getInt(7),
					rs.getInt(8), rs.getInt(9), rs
							.getObject(9).toString(), estadoCivil, sexo, rs
							.getInt(12), rs.getInt(14), rs
							.getFloat(15), (int) rs.getFloat(16), movilidad, rs
							.getObject(18).toString(), domicilio);
			p.setIdPersona(Integer.parseInt(businessId));
		} catch (SQLException exc) {
			exc.printStackTrace();
		}
		return p;
	}

	// IN pin_idpersona int(10) unsigned,
	// OUT pout_nombre varchar(45),
	// OUT pout_apellido varchar(45),
	// OUT pout_idtipodocumento int(10) unsigned,
	// OUT pout_nrodocumento varchar(15),
	// OUT pout_fechanacimiento VARCHAR(10),
	// OUT pout_idnacionalidad int(10) unsigned,
	// OUT pout_celular varchar(12),
	// OUT pout_telefono varchar(10),
	// OUT pout_email varchar(45),
	// OUT pout_idestadocivil int(10) unsigned,
	// OUT pout_sexo tinyint(1),
	// OUT pout_cuil varchar(11),
	// OUT pout_cantidadhijos int(2) unsigned,
	// OUT pout_estatura decimal(2,0),
	// OUT pout_peso decimal(2,0),
	// OUT pout_movilidad tinyint(1),
	// OUT pout_observacion varchar(150),
	// OUT pout_iddomicilio int(10) unsigned)

	@Override
	public Collection getAll() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int insert(Object b) {
		Persona p=(Persona)b;
		String query,fecha;
		int id=-1;
		try{
		p.getDomicilio().setIdDomicilio(new DAODomicilio(manager).insert(p.getDomicilio()));
        fecha=sdformat.format(p.getFechaNacimiento());
        char movilidad=p.hasMovilidad()?'S':'N';        
        query= "select tesis.save_Persona(NULL,"+ 
        +p.getTipoDocumento().getIdTipoDocumento()+ ","+ p.getNroDocumento()+
          ",\'"+p.getApellido()+"\',\'"+p.getNombre()+"\',\'"+p.getSexo().charAt(0)+"\',"
          + p.getNacionalidad().getIdNacionalidad()+","+p.getTelCelular()+","+
          +p.getPrefijo()+","+p.getTelefonoRed()+",\'"+p.getEmail()+"\',"+p.getEstadoCivil().getIdEstadoCivil()
          +","+p.getCuil()+","+p.getCantidadHijos()+","+p.getEstatura()+","+p.getPeso()+
          ",\'"+movilidad+"\',\'"+fecha+"\',\'"+p.getObservacion()+"\',"+p.getDomicilio().getIdDomicilio()+")";
        ResultSet rs = manager.openQuery(query);
        rs.first();
        id=rs.getInt(1);
     
    } catch (SQLException ex) {
        ex.printStackTrace();
       
    }
    return id;
	}
	
//	var_idpersona                INTEGER  DEFAULT pin_idpersona;
//	  DECLARE      var_idtipodocumento          INT DEFAULT pin_idtipodocumento;
//	  DECLARE      var_nrodocumento             INT DEFAULT pin_nrodocumento;
//	  DECLARE      var_apellido                 VARCHAR(45) DEFAULT pin_apellido;
//	  DECLARE      var_nombre                   VARCHAR(45) DEFAULT pin_nombre;
//	  DECLARE      var_sexo                   CHAR(2) DEFAULT pin_sexo;
//	  DECLARE      var_fechanacimiento           DATE;
//	  DECLARE      var_idnacionalidad          INT DEFAULT pin_idtipodocumento;
//	  DECLARE      var_celular                 INT(20) DEFAULT pin_celular;
//	  DECLARE      var_prefijo                 INT(5) DEFAULT pin_prefijo;
//	  DECLARE      var_telefono                 INT(20) DEFAULT pin_telefono;
//	  DECLARE      var_email                   VARCHAR(45) DEFAULT pin_email;
//	  DECLARE      var_cantidadhijos           INT DEFAULT pin_cantidadhijos;
//	  DECLARE      var_estatura                DECIMAL(2,0) DEFAULT pin_estatura;
//	  DECLARE      var_peso                    DECIMAL(2,0) DEFAULT pin_peso;
//	  DECLARE      var_cuil                   BIGINT(20) DEFAULT pin_cuil;
//	  DECLARE      var_movilidad                TINYINT(1) DEFAULT pin_movilidad;
//	  DECLARE      var_observacion            VARCHAR(255) DEFAULT pin_observacion;
//	  DECLARE      var_iddomicilio 

	@Override
	public void update(Object b) {
		// TODO Auto-generated method stub

	}

}
